Skip to content

[Feature] 영화 리스트(메인화면) 구현 및 검색 UI 구현 #16

Merged
minneee merged 12 commits intomainfrom
feature/movie-list
Oct 17, 2025
Merged

[Feature] 영화 리스트(메인화면) 구현 및 검색 UI 구현 #16
minneee merged 12 commits intomainfrom
feature/movie-list

Conversation

@minneee
Copy link
Contributor

@minneee minneee commented Oct 16, 2025

✨ 작업 내용

  • 영화 리스트 UI 구현
  • 영화 리스트 네트워크 통신 및 데이터 파싱
  • 영화 검색 UI 구현

Checklist

  • 브랜치를 가져와 작업한 경우 이전 브랜치에 PR을 보냈는지 확인
  • 빌드를 위해 SceneDelegate 수정한 것 PR로 올리지 않았는지 확인
  • 필요없는 주석, 프린트문 제거했는지 확인
  • 컨벤션 지켰는지 확인
  • final, private 제대로 넣었는지 확인
  • 다양한 디바이스에 레이아웃이 대응되는지 확인
    • iPhone SE
    • iPhone 13
    • iPhone 13 Pro Max

Copy link
Contributor

@Peter1119 Peter1119 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다 ~!

Comment on lines 41 to 46
enum MovieCategory: String {
case popular
case nowPlaying = "now_playing"
case topRated = "top_rated"
case upcoming
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이건 model이나 data 쪽으로 옮겨도 좋을 것 같아요 ~!
request 폴더를 만들어도 좋을 것 같습니다 ~!

Comment on lines +11 to +28
protocol MovieRepositoryProtocol {
func fetchNowPlayingMovies() async throws -> [Movie]
func fetchUpcomingMovies() async throws -> [Movie]
func fetchPopularMovies() async throws -> [Movie]
}

private enum MovieRepositoryKey: DependencyKey {
static let liveValue: any MovieRepositoryProtocol = MovieRepository()
static let previewValue: any MovieRepositoryProtocol = MockMovieRepository()
static let testValue: any MovieRepositoryProtocol = MockMovieRepository()
}

extension DependencyValues {
var movieRepository: MovieRepositoryProtocol {
get { self[MovieRepositoryKey.self] }
set { self[MovieRepositoryKey.self] = newValue }
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 좋은데요 ? repository도 해보고싶었는데 단일 레포라 가능하겠네요

Comment on lines +11 to +13
let movieTitle: String
let movieRating: Int
let posterPath: String?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

접근 제어를 해주는 것도 좋을 것 같습니다 ~!

Comment on lines +10 to +24
struct StarRatingView: View {
let rating: Int

var body: some View {
HStack(spacing: 4) {
ForEach(1...5, id: \.self) { index in
Image(systemName: "star.fill")
.resizable()
.scaledToFit()
.frame(width: 12, height: 12)
.foregroundColor(index <= rating ? .yellow : .gray)
}
}
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이거 progressView인가 그거로 하면 3.8의 별점도 표현할 수 있을 것 같은데 이건 시간 더 있으면 개선사항으로 해보시죠!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 동일한 뷰를 사용해야해서 우선 사용하다가 시간 있으면 개선하겠습니다 !


@Reducer
struct MovieListFeature {
@Dependency(\.movieRepository) var movieRepository
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 repository를 바로 feature에 들어갔군요
음 .. 생각해볼내용이네요
repository 인터페이스는 어쨋든 domain에 있으니 참조할 수 있지 않나? 라는 생각이 들면서도
구현체는 data 레이어에 있어서 괜찮은건가? 라는 생각도 드네요

이건 저도 좀더 찾아보겠습니다.

Copy link
Contributor

@Roy-wonji Roy-wonji left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@minneee 수고 하셨습니다!


enum Action {
case onAppear
case fetchMovie
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@minneee 여기 Action 들을 조금 나누어 보는건 어떨까요 ?? 지금도 좋은데 뷰액션을 나누어 보는것도 괜찮을거 같습니다 !

@minneee minneee merged commit cef9ff8 into main Oct 17, 2025
@minneee minneee deleted the feature/movie-list branch October 17, 2025 08:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants